<?php

class LoginController extends AppController {

    var $name = 'Login';
    var $uses = array('Usuario', 'UsuarioPunto', 'ModuloUsuario', 'Configuracion', 'CorreoPlantilla', 'Contingencia');
    var $components = array('Interfaz', 'Maestro');
    var $helpers = array('Formulario', 'Interfaz');
    var $layout = "punto";

    function index() {
        $ver = true;
        if (count($_GET) > 1) {
            $c_tie = (isset($_GET['tienda'])) ? $_GET['tienda'] : null;
            $c_cla = (isset($_GET['clave'])) ? $_GET['clave'] : null;
            $c_ip = (isset($_GET['ip'])) ? $_GET['ip'] : null;
        } else {
            if (isset($this->request->data) && count($this->request->data) > 0) {
                $c_tie = $this->request->data['c_tie'];
                $c_cla = $this->request->data['c_cla'];
                $c_ip = $this->request->data['c_ip'];
            } else {
                $c_cla = null;
                $c_tie = null;
                $c_ip = null;
                $ver = false;
            }
        }
        $this->set('c_tie', $c_tie);
        $this->set('c_cla', $c_cla);
        $this->set('c_ip', $c_ip);
        $this->set('ver', $ver);
        $error = 1;
        if ($this->Interfaz->navegador())
            $this->layout = "punto";
        else
            $this->layout = "navegador";
        extract($this->request->data);
        $usuario_id = $this->Session->read('usuario_id');
        if (isset($this->request->data) && count($this->request->data) > 0) {
            $this->set('usuario', $this->request->data['usuario']);
            $this->set('clave', $this->request->data['clave']);
            if (isset($usuario_id) && $usuario_id != null) {
                $usuario_id = $this->Interfaz->id($usuario_id);
                $qry = "update usuarios set conectado=0 where id=$usuario_id";
                $this->Usuario->query($qry);
                $this->Session->destroy();
            }
            $set_mensaje = '';
            if (empty($usuario)) {
                $set_mensaje = '2_Campo Usuario Vacio';
            } else if (empty($clave)) {
                $set_mensaje = '2_Campo Clave Vacio';
            }
            /* else if(empty($codigo)){
              $set_mensaje='Campo Codigo Vacio';
              }
              else if(empty($imagen)){
              $set_mensaje='Error Capcha Vacio';
              }
              else if($this->Interfaz->mayuscula($codigo) != $this->Interfaz->mayuscula($imagen)){
              $set_mensaje='Error Codigo Capcha Invalido';
              } */ else {
                $usuario = $this->Interfaz->mayuscula($usuario);
                $clave = $this->Interfaz->clave($clave);
                //$codigo  = $this->Interfaz->mayuscula($codigo);
                //$imagen  = $this->Interfaz->mayuscula($imagen);

                $condiciones = array("UPPER(Usuario.usuario)" => $usuario, "Usuario.contrasena" => $clave, "Usuario.estatus" => 1);
                $datosUsuario = $this->Usuario->find('count', array('conditions' => $condiciones));
                if ($datosUsuario > 0) {
                    $condiciones = array("UPPER(Usuario.usuario)" => $usuario, "Usuario.contrasena" => $clave, "Usuario.estatus" => 1/* , "Usuario.conectado" => 0 */);
                    $datosUsuario = $this->Usuario->find('count', array('conditions' => $condiciones));
                    if ($datosUsuario > 0) {
                        $campos = array("Usuario.id", "Usuario.usuario", "Usuario.tipo_usuario_id", "Usuario.tienda_id", "Funcionario.nombre", "Funcionario.apellido", "Funcionario.cedula", "Funcionario.celular", "Tienda.nombre", "Tienda.central");
                        $datosUsuario = $this->Usuario->find('first', array('fields' => $campos, 'conditions' => $condiciones));
                        $tot_tiendas = $this->UsuarioPunto->find('count', array('conditions' => array('UsuarioPunto.usuario_id' => $datosUsuario['Usuario']['id'], 'UsuarioPunto.estatus' => 1, 'UsuarioPunto.punto_id > ' => 0)));
                        $datosUsuario['Config']['clave'] = $c_cla;
                        $datosUsuario['Config']['tienda'] = $c_tie;
                        $datosUsuario['Config']['ip'] = $c_ip;

                        if ($tot_tiendas > 1) {
                            //if (isset($cod_tienda)) {
                            if (isset($cod_tienda) || isset($c_tie) ) {
                                $cod_tienda = (!empty($cod_tienda)) ? $cod_tienda : $c_tie;
                                $lis_tiendas = $this->UsuarioPunto->find('first', array('fields' => array('Tienda.codigo', 'Tienda.nombre', 'Tienda.id'), 'conditions' => array('Tienda.codigo' => $cod_tienda)));
                                $datosUsuario['Punto']['punto'] = $lis_tiendas['Tienda']['codigo'];
                                $datosUsuario['Punto']['nombre'] = $lis_tiendas['Tienda']['nombre'];
                                $datosUsuario['Punto']['id'] = $lis_tiendas['Tienda']['id'];
                                $tiendaSesion = 'punto_' . $datosUsuario['Punto']['punto'];
                                $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
                                $dato_p = $objPunto->find('first', array(
                                    'fields' => array('Punto.id', 'Punto.nombre'), 
                                    'conditions' => array(
                                        'OR' => array(
                                            array(
                                                'AND' => array('Punto.tienda_id' => $lis_tiendas['Tienda']['id'], 'Punto.ip' => $c_ip, 'Punto.clave' => $c_cla, 'Punto.estatus' => 1, 'Punto.conectado' => 0)
                                                ),
                                            array(
                                                'AND' => array('Punto.tienda_id' => $lis_tiendas['Tienda']['id'], 'Punto.ip' => $c_ip, 'Punto.clave' => $c_cla, 'Punto.estatus' => 1, 'Punto.conectado' => 1, 'Punto.usuario_id ' =>$datosUsuario['Usuario']['id'])
                                               )
                                        )
                                    )));
                                if (count($dato_p) > 0) {
                                    $datosUsuario['Punto']['caja'] = $dato_p['Punto']['id'];
                                    $datosUsuario['Punto']['nombre_caja'] = $dato_p['Punto']['nombre'];
                                    $set_mensaje = $this->conectar($datosUsuario);
                                } else {
                                    $set_mensaje = '2_El punto ya esta Siendo Usado!!!';
                                }
                            } else {
                                $lis_tiendas = $this->UsuarioPunto->find('all', array('fields' => array('Tienda.codigo', 'Tienda.nombre'), 'conditions' => array('UsuarioPunto.usuario_id' => $datosUsuario['Usuario']['id'], 'UsuarioPunto.estatus' => 1, 'UsuarioPunto.punto_id > ' => 0)));
                                foreach ($lis_tiendas as $tiendas) {
                                    $lista[$tiendas['Tienda']['codigo']] = '(' . $tiendas['Tienda']['codigo'] . ')-' . $tiendas['Tienda']['nombre'];
                                }
                                $this->set('lista_tiendas', $lista);
                                $set_mensaje = '2_Seleccione el Punto de Venta';
                            }
                        } elseif ($tot_tiendas == 1) {
                            $lis_tiendas = $this->UsuarioPunto->find('first', array('fields' => array('Tienda.codigo', 'Tienda.nombre', 'Tienda.id'), 'conditions' => array('UsuarioPunto.usuario_id' => $datosUsuario['Usuario']['id'], 'UsuarioPunto.estatus' => 1, 'UsuarioPunto.punto_id > ' => 0)));
                            $datosUsuario['Punto']['punto'] = $lis_tiendas['Tienda']['codigo'];
                            $datosUsuario['Punto']['nombre'] = $lis_tiendas['Tienda']['nombre'];
                            $datosUsuario['Punto']['id'] = $lis_tiendas['Tienda']['id'];

                            $tiendaSesion = 'punto_' . $datosUsuario['Punto']['punto'];
                            $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
                            $dato_p = $objPunto->find('first', array(
                                'fields' => array('Punto.id', 'Punto.nombre'), 
                                'conditions' => array(
                                    'OR' => array(
                                        array(
                                            'AND' => array('Punto.tienda_id' => $lis_tiendas['Tienda']['id'], 'Punto.ip' => $c_ip, 'Punto.clave' => $c_cla, 'Punto.estatus' => 1, 'Punto.conectado' => 0)
                                            ), 
                                        array(
                                            'AND' => array('Punto.tienda_id' => $lis_tiendas['Tienda']['id'], 'Punto.ip' => $c_ip, 'Punto.clave' => $c_cla, 'Punto.estatus' => 1, 'Punto.conectado' => 1, 'Punto.usuario_id ' =>$datosUsuario['Usuario']['id'])
                                            )
                                        )
                                )));
                            if (count($dato_p) > 0) {
                                $datosUsuario['Punto']['caja'] = $dato_p['Punto']['id'];
                                $datosUsuario['Punto']['nombre_caja'] = $dato_p['Punto']['nombre'];
                                $this->conectar($datosUsuario);
                            } else {
                                $set_mensaje = '2_El punto ya esta Siendo Usado!!!';
                            }
                        } else {
                            $set_mensaje = '2_Usuario no posee puntos asociados';
                        }
                    } else {
                        $set_mensaje = '2_Usuario ya está Conectado!!!';
                    }
                } else {
                    $set_mensaje = '2_Usuario o Clave inválidos, Intente Nuevamente!!!';
                }
            }
            echo $set_mensaje;
            $this->autoRender = false;
        }
    }

    public function conectar($datosUsuario) {
        $this->Session->write('sesion_id', $this->Session->id());
        $this->Session->write('config_ip', $datosUsuario['Config']['ip']);
        $this->Session->write('config_tienda', $datosUsuario['Config']['tienda']);
        $this->Session->write('config_clave', $datosUsuario['Config']['clave']);
        $id_usuario = $this->Interfaz->id_encode($datosUsuario['Usuario']['id']);
        $tipo_usuario = $this->Interfaz->id_encode($datosUsuario['Usuario']['tipo_usuario_id']);
        $this->Session->write('tiendaBD', 'punto_' . $datosUsuario['Punto']['punto']);
        $this->Session->write('codigo_punto', $datosUsuario['Punto']['punto']);
        $this->Session->write('nombre_punto', $datosUsuario['Punto']['nombre']);
        $this->Session->write('nombre_caja', $datosUsuario['Punto']['nombre_caja']);
        $id_tienda_t = $this->Interfaz->id_encode($datosUsuario['Punto']['id']);
        $this->Session->write('tienda_id_trabajo', $id_tienda_t);
        $this->Session->write('punto_id', $datosUsuario['Punto']['caja']); //Caja Actual de Trabajo
        $this->Session->write('tipo_usuario', $tipo_usuario);
        $this->Session->write('usuario_id', $id_usuario);
        $this->Session->write('nombre_usuario', $datosUsuario['Funcionario']['nombre'] . ' ' . $datosUsuario['Funcionario']['apellido']);
        $this->Session->write('cedula_usuario', $datosUsuario['Funcionario']['cedula']);
        $this->Session->write('tlf_usuario', $datosUsuario['Funcionario']['celular']);
        $this->Session->write('username', $datosUsuario['Usuario']['usuario']);
        $this->Session->write('hora_acceso', date('h:i:s'));
        $this->Session->write('autenticado', true);
        $id_tienda = $this->Interfaz->id_encode($datosUsuario['Usuario']['tienda_id']);
        $this->Session->write('tienda_id_usuario', $id_tienda);
        $this->Session->write('nombre_tienda', $datosUsuario['Tienda']['nombre']);
        $this->Session->write('es_central', $datosUsuario['Tienda']['central']);
        $contingencia = $this->Contingencia->find('first', array('conditions' => array('Contingencia.inicio <=' => date('d-m-Y'), 'Contingencia.fin >=' => date('d-m-Y'), 'Contingencia.tienda_id' => $datosUsuario['Punto']['id'], 'Contingencia.punto_id' => $datosUsuario['Punto']['caja'], 'Contingencia.estatus' => 1)));
        if (!empty($contingencia)) {
            $fechasCont = array();
            $fechasCont[] = $this->Interfaz->formatofecha($contingencia['Contingencia']['fecha_precio']);
            $fechasCont[] = date('d-m-Y');
            $contingencia = json_encode($fechasCont);
        } else
            $contingencia = '';
        $this->Session->write('contingencia', $contingencia);
        $this->request->data = null;
        $this->request->data['Usuario']['id'] = $datosUsuario['Usuario']['id'];
        $this->request->data['Usuario']['conectado'] = '1';
        $this->request->data['Usuario']['sesion'] = $this->Session->id();

        if ($this->Usuario->save($this->request->data)) {
            $tiendaSesion = 'punto_' . $datosUsuario['Punto']['punto'];
            $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
            $this->request->data = null;
            $this->request->data['Punto']['id'] = $datosUsuario['Punto']['caja'];
            $this->request->data['Punto']['conectado'] = '1';
            $this->request->data['Punto']['usuario_id'] = $datosUsuario['Usuario']['id'];
            if ($objPunto->save($this->request->data)) {
                $query = "SELECT m.id, m.padre_id, m.nombre, m.orden, mo.accion
                            FROM modulos m
                            INNER JOIN modulo_opcions mo ON mo.modulo_id = m.id
                            INNER JOIN modulo_usuarios mu ON mu.modulo_opcion_id = mo.id
                            WHERE mu.usuario_id = {$datosUsuario['Usuario']['id']} AND m.estatus = 1 AND mu.tienda_id = {$datosUsuario['Punto']['id']}
                            ORDER BY m.padre_id, m.orden";
                $permisos = $this->ModuloUsuario->query($query);
                $permisoUsuario = array();
                foreach ($permisos as $valor) {
                    $permisoUsuario[str_replace(' ', '_', $valor[0]['nombre'])][str_replace(' ', '_', $valor[0]['accion'])] = 1;
                }
                $this->Session->write('permiso_usuario', $permisoUsuario);

                $d = $this->CorreoPlantilla->find('first', array('conditions' => array('CorreoPlantilla.codigo' => 'ERROR_SQL')));
                $this->Session->write('dataPlantilla', $d['CorreoPlantilla']);
                $d = $this->CorreoPlantilla->find('all', array('conditions' => array('CorreoPlantilla.estatus' => 1)));
                foreach($d as $indice => $datos){
                    $plantillas[$datos['CorreoPlantilla']['codigo']] = $datos['CorreoPlantilla'];
                }
                $this->Session->write('plantillas', $plantillas);

                $parametros = $this->Configuracion->find('all', array('conditions' => array('estatus' => 1)));
                foreach ($parametros as $datos) {
                    if (!isset($_SESSION[$datos['Configuracion']['campo']])) {
                        if (in_array($datos['Configuracion']['campo'], array("EMAIL_FROM_NAME", "SYSTEM_NAME_NOTIF_ERROR")))
                            $this->Session->write($datos['Configuracion']['campo'], 'PUNTO DE VENTA');
                        else
                            $this->Session->write($datos['Configuracion']['campo'], $datos['Configuracion']['valor']);
                    }
                }
                $this->_sesion_plana();
                echo "1_";
                //$this->redirect('../PuntoVentas');
            } else {
                return 'Ocurrio un error conectando, Intente Nuevamente';
            }
        } else {
            return 'Ocurrio un error conectando, Intente Nuevamente';
        }
    }

    public function cerrar_session() {
        $usuario_id = $this->Session->read('usuario_id');
        $config_ip = $this->Session->read('config_ip');
        $config_clave = $this->Session->read('config_clave');
        $config_tienda = $this->Session->read('config_tienda');
        $tiendaSesion = $this->Session->read('tiendaBD');
        $punto_id = $this->Session->read('punto_id');

        $this->Session->destroy();
        if (isset($usuario_id) && $usuario_id != null) {
            $usuario_id = $this->Interfaz->id($usuario_id);
            $qry = "update usuarios set conectado = 0 where id = $usuario_id";
            $this->Usuario->query($qry);
            $objPunto = $this->Maestro->modelo('punto', 'Punto', $tiendaSesion);
            $qry = "update puntos set conectado = 0, usuario_id = 0 where id = $punto_id";
            $objPunto->query($qry);
        }
        $this->_vaciar_sesion_plana();
        $this->redirect("../?tienda=$config_tienda&clave=$config_clave&ip=$config_ip");
        return 0;
    }

}
